/* 
 * File:   Partida.h
 * Author: fibrizo
 *
 * Created on 24 de mayo de 2014, 17:45
 */

#ifndef PARTIDA_H
#define	PARTIDA_H

#include "Jugador.h"
#include "Campania.h"
#include "Evento.h"
#include "Nivel.h"
#include <queue>
#include <map>
#include <string>

using std::map;
using std::string;
using std::queue;

typedef struct vector<Nivel> vectorN;
typedef struct map<string, Jugador> hash;

class Partida {
private:
    queue<Evento> colaDeEventos;        // Esto tiene que se una referencia
    unsigned int cantidadJugadoresActual;
    unsigned int cantidadJugadoresRequerida;
    hash jugadores;
    Campania campania;
    Nivel nivelActual;
    bool terminada;
    bool lista;
    bool Jugando;
    bool campaniaCargada;
    size_t alcanceBombas;
    float tiempoDetonacion;
    // Otros tiempos
    float tiempRefresco;
    float tiempoRegerenacionBomba;
    // Velocidades de desplazamiento
    float tiempoZombieVerde;
    float tiempoBomberman;
    float tiempoDisparo;
    // Mapa
    size_t tamanioMapa;
    vectorN crearNiveles(vector<string> datos);
public:
    //Constructores
    Partida();
    Partida(Jugador& host);
    Partida(Jugador& host, string rutaArchivoCampania);
    Partida(const Partida& orig);
    //Metodos
    void agregarJugador(Jugador& nuevoJugador);
    void eliminarJugador(Jugador jugador);
    bool jugadoresListos();
    bool estaListaParaComenzar();
    bool cargarCampania(string rutaArchivoCampania);
    bool cargarDatosDeConfiguracion(string rutaArchivoConfiguracion);
    void actualizarEstado();
    bool nivelActualTerminado();
    bool correr();
    Campania obtenerCampania();
    //Destructor
    virtual ~Partida();
};

#endif	/* PARTIDA_H */

